/**
 * 学生校验模块
 */

const Joi = require('joi');
const { messages, validPage } = require('../validators/common');

/**
 * 校验添加
 */
const validAdd = Joi.object({
    name: Joi.string().label('学生姓名').max(20).empty().required().messages(messages),
    idNo: Joi.string().label('身份证号').pattern(/^\d{17}[\dXx]$/).required().messages(messages),
    phone: Joi.string().label('手机号').allow('').pattern(/^1[3-9]\d{9}$/).messages(messages),
    class_id: Joi.number().label('班级ID').integer().min(1).required().messages(messages),
    join_date: Joi.date().label('日期').required().messages(messages),
    record: Joi.number().label('学生档案').integer().valid(20, 21).required().messages(messages),
    oldSchool: Joi.string().label('原学校').max(20).when('record', { is: Joi.valid(21), then: Joi.string().min(2).empty().required(), otherwise: Joi.string().allow('', null) }).messages(messages),
    address: Joi.string().label('地址').min(6).max(100).required().messages(messages)
});

/**
 * 校验修改
 */
const validUpdate = Joi.object({
    id: Joi.number().label('id').integer().min(1).required().messages(messages),
    name: Joi.string().label('学生姓名').max(20).empty().required().messages(messages),
    idNo: Joi.string().label('身份证号').pattern(/^\d{17}[\dXx]$/).required().messages(messages),
    phone: Joi.string().label('手机号').allow('', null).pattern(/^1[3-9]\d{9}$/).messages(messages),
    join_date: Joi.date().label('日期').required().messages(messages),
    address: Joi.string().label('地址').min(6).max(100).required().messages(messages)
});

/**
 * 校验更改状态
 */
const validChange = Joi.object({
    id: Joi.number().label('id').integer().min(1).required().messages(messages),
    status: Joi.number().label('状态').integer().valid(23, 24).required().messages(messages),
});

/**
 * 校验搜索
 */
const validSearch = Joi.object({
    name: Joi.string().label('学生姓名').allow('').max(20).messages(messages),
    idNo: Joi.string().label('身份证号').allow('').max(18).messages(messages),
    phone: Joi.string().label('手机号').allow('').max(11).messages(messages),
    status: Joi.number().label('状态').integer().min(0).messages(messages),
    class_id: Joi.number().label('班级ID').integer().min(0).messages(messages),
}).concat(validPage);

/**
 * 校验更改档案
 */
const validChangeRecord = Joi.object({
    id: Joi.number().label('id').integer().min(1).required().messages(messages),
    record: Joi.number().label('档案').integer().valid(21, 22, 27, 28).required().messages(messages),
    date: Joi.date().label('日期').required().messages(messages),
    class_id: Joi.number().integer().min(1).when('record', { is: Joi.valid(22), then: Joi.required().label('新班级') }).when('record', { is: Joi.valid(21), then: Joi.required().label('转入班级') }),
    school: Joi.string().label('新学校').when('record', { is: Joi.valid(27), then: Joi.string().empty().required(), otherwise: Joi.string().allow('', null) }),
    oldSchool: Joi.string().label('原学校').when('record', { is: Joi.valid(21), then: Joi.string().empty().required(), otherwise: Joi.string().allow('', null) }),
});

/**
 * 校验学生添加紧急联系人
 */
const validAddEmergency = Joi.object({
    student_id: Joi.number().label('学生ID').integer().min(1).required().messages(messages),
    contact_name: Joi.string().label('联系人姓名').max(20).empty().required().messages(messages),
    contact_relation: Joi.string().label('与联系人关系').max(10).empty().required().messages(messages),
    phone: Joi.string().label('手机号').pattern(/^1[3-9]\d{9}$/).required().messages(messages)
});

/**
 * 校验修改紧急联系人
 */
const validUpdateEmergency = Joi.object({
    id: Joi.number().label('ID').integer().min(1).required().messages(messages)
}).concat(validAddEmergency);

/**
 * 校验搜索学生档案
 */
const validSearchArchives = Joi.object({
    student_id: Joi.number().label('学生ID').integer().min(0).allow('', null).messages(messages),
    start_date: Joi.date().label('开始日期').allow('', null).messages(messages),
    end_date: Joi.date().label('结束日期').allow('', null).messages(messages),
    record: Joi.number().label('档案').integer().min(0).allow('', null).messages(messages),
}).concat(validPage);

/**
 * 校验添加费用
 */
const validAddFee = Joi.object({
    student_id: Joi.number().label('学生ID').integer().min(1).required().messages(messages),
    fee: Joi.number().label('费用').min(1).required().messages(messages),
    date: Joi.date().label('缴费日期').required().messages(messages),
    type: Joi.number().label('缴费类型').valid(29, 30, 31, 32).required().messages(messages),
});

/**
 * 校验搜索学生费用
 */
const validSearchFee = Joi.object({
    student_id: Joi.number().label('学生ID').integer().min(0).allow('', null).messages(messages),
    min_fee: Joi.number().label('最低费用').min(1).allow('', null).messages(messages),
    max_fee: Joi.number().label('最高费用').min(1).allow('', null).messages(messages),
    start_date: Joi.date().label('开始日期').allow('', null).messages(messages),
    end_date: Joi.date().label('结束日期').allow('', null).messages(messages),
    type: Joi.number().label('缴费类型').valid('', null, 0, 29, 30, 31, 32).messages(messages),
}).concat(validPage);

module.exports = {
    validAdd,
    validUpdate,
    validChange,
    validSearch,
    validAddFee,
    validSearchFee,
    validChangeRecord,
    validAddEmergency,
    validSearchArchives,
    validUpdateEmergency,
}